// LIFO  last into first out  后进先出

class Stack{
    constructor(){
        this.items = {};  //存储数据  {0:'a',1:'b',2:'c'}  ----> a,b,c
        this.count = 0;   //数据个数，数据的键
    }

    //push添加的方法
    push(element){
        this.items[this.count] = element;  //0
        this.count++;
    }

    //pop 从栈顶移除元素
    pop(){
        if(this.count === 0 ){
            return  undefined
        }
        let top = this.items[this.count-1]; //最顶端的元素
        delete this.items[this.count-1];
        this.count--;
        return top
    }

    //返回栈顶元素
    peek(){
        return this.items[this.count-1]
    }
    //判断当前栈是否为空
    isEmpty(){
        return this.count === 0
    }
    //清空当前的栈
    clear(){
        this.items = {};
        this.count = 0;
    }
    //返回栈的元素个数
    size(){
        return this.count
    }

    //转字符串
    toString(){
        let str = this.items[0]; //a
        for(let i = 1;i<this.count;i++){
           str = `${str},${this.items[i]}`
        }
        return str
    }
}

// let s = new Stack();

// s.push('a');

// s.push('b');

// // console.log(s.pop());

// console.log(s);

// console.log(s.toString());

//函数：1.函数的参数  2.函数的返回值  3.函数的功能  4.在何哪调用？

function TenToTwo(num){
    let s = new Stack();  //s
    let str = '';
    //余数放进s
    while(num > 0){
        let rem = Math.floor(num%2);
        s.push(rem);
        num = Math.floor(num/2);
    }
    console.log(s);
    let count = s.size();//当前栈的元素个数
    for(let i = 0; i< count;i++){
        str += s.pop()  //拿到最顶端的数据
    }
    return str
    
    //return 二进制的数字 
}

console.log(TenToTwo(10))